import java.util.Arrays;

public class MyStack {

    public int[] elem;
    public int usedSize;//不初始化，默认是0
    public MyStack(){
        this.elem = new int[5];
    }
/*
入栈
 */
    public void push(int val){
        if(isFull()){
     this.elem = Arrays.copyOf(this.elem,2*this.elem.length);
  //2倍扩容
        }
        this.elem[this.usedSize]=val;
        this.usedSize++;
}
       public boolean isFull(){ //判断是否满了
        return usedSize == elem.length;
}
/*
   出栈（要删除）
 */
    public int pop(){  //能pop前提是栈不空
    if(empty( )){ //写empty的时候，在下面写个empty的方法
     throw new RuntimeException("栈为空");//不自定义异常了，不算特别规范

    }
    int ret = elem[usedSize-1];//要返回这个下标的元素
    //elem[usedSize-1] = null;栈内存中 存引用类型的时候 要把他置为空
    usedSize--; //入下一个元素直接把这个没有出栈的元素覆盖了
    return ret;

}
   public boolean empty(){
    return usedSize == 0;
}
/*
获取栈顶元素 不能删除
 */
    public int peek(){
    if(empty()){//写empty的时候，在下面写个empty的方法
            throw new RuntimeException("栈为空");//不自定义异常了，不算特别规范

        }
    return  elem[usedSize-1];//要返回这个下标的元素


    }
    /*
    获取大小
     */
    public int getUsedSize(){
    return usedSize;
}

}
